/**
 * @copyright Copyright (c) 2025 
 * CSG Digital Grid Technology (Guangdong) Co., Ltd.
 * @author xxxcsg
 * @brief 鹰眼组件工具接口头文件
 */

#ifndef __EAGLE_EYS_SERVER_H__
#define __EAGLE_EYS_SERVER_H__

#ifdef __cplusplus
extern "C" {
#endif

#include <stdbool.h>

typedef struct {
    int type;

}EagleEysBusiness;

typedef struct {
    int type;
    int len;
    char data[0];
}EagleEysBusinessPackage;


typedef enum {
    UNKNOWN_TYPE = 0,
    GET_4G_MODULE_INFO,
    GET_POWER_INFO,
    GET_LOGIN_INFO,
    TYPE_MAX
}EagleEyeBusinessType;






/*基本信息*/
typedef struct {
    char manufacture[256];      //生产厂家 
    char model[128];            //模组型号
    char imsi[64];              //IMSI号（国际移动用户 识别码）
    char simId[32];             //Sim卡号
    char ip[16];                //4G模组的ip
    char netType[16];           //网络类型 
    char devName[16];           //网卡名
    char simStatus[16];         //SIM卡状态
    char modelFirmwareVersion[64];  //模组固件版本
    char iccid[64];                 //集成电路卡识别号
    char imei[64];                  //国际移动设备身份码
    char carrierInformation[64];    //运营商信 息
    int bandWidth;              //带宽， MB
} __attribute__((packed)) BaseInfo ;

/*网卡流量信息*/
typedef struct 
{
    char iface[16];             //网卡名
    unsigned short rxBytes;     //接收字节数区间累计值
    unsigned short txBytes;     //发送字节数区间累计值
    unsigned short rxPackets;   //接收包数区间累计值
    unsigned short txPackets;   //发送包数区间累计值

} __attribute__((packed)) InterfaceTraffic ;
    
/*小区信息 */
typedef struct {
    char rsrp[16];      //基准信号接收功率
    char rsrq[16];      //基准信号接收质量，取值范 围：-3~-19.5
    char rssi[16];      //接收信号强度指示
    char sinr[16];      //信号与干扰加噪声比
    char upSpeed[16];   //上行速率
    char downSpeed[16]; //下行速率
    char speed[16];     //网络带宽
}__attribute__((packed)) ServingCell ;


/*  
 * @brief 4G模块信息结构体
*/
typedef struct {
    BaseInfo baseInfo;
    InterfaceTraffic interfaceTraffic;
    ServingCell servingCell;
    bool support4G;
} __attribute__((packed)) ModuleMesg ;


/*  
 * @brief 登录信息结构体
*/
typedef struct {
    char loginTime[32];     //登录时间 "20xx-xx-xx xx:xx:xx"
    char user[16];          //登录用户名
    char srcIP[32];         //登录IP
    char srcPort[16];       //登录端口
    char dstIP[32];         //登录目标IP
    char dstPort[16];       //登录目标端口
    char cmd[16];           //登录命令      sshd
    char cmdOutput[16];     //登录命令结果  Accepted / Failed
    char opTime[32];        //操作时间 "20xx-xx-xx xx:xx:xx"
} __attribute__((packed)) LoginMesg ;


/**
 * @brief 模块信息回调函数
 * @param  模块信息结构体，无需再分配内存
 * @return 0:成功，非0：失败
 */
typedef int (*moduleMesgCallbak)(ModuleMesg *mesg);

/**
 * @brief 电量信息回调函数
 * @param float
 * @return 0:成功，非0：失败
 */
typedef int (*powerMesgCallbak)(float *power);

/**
 * @brief 登录信息回调函数
 * @param 登录信息结构体，无需再分配内存
 * @return 0:成功，非0：失败
 */
typedef int (*loginMesgCallbak)(LoginMesg *login);

typedef struct {
    moduleMesgCallbak   moduleMesgFunc;
    powerMesgCallbak    powerMesgFunc; 
    loginMesgCallbak    loginMesgFunc; 
} BusinessHandle;

/**
 * @brief 初始化服务并注册业务处理函数,需将自己实现的方法添加到 BusinessHandle结构体，并注册到该函数中。
 *        如果厂家未使用自己的ssh功能，需将登录信息回调函数置空 handle->loginMesgFunc = NULL
 * @param handle
 * @return 0:成功，非0：失败
 */
int EagleEyeServerInit(BusinessHandle *handle);




#ifdef __cplusplus
}
#endif

#endif